import { sendJSON } from "@/utils/request";
export default class CURD {
  constructor({ url }) {
    this.data = function() {
      return {
        // 配置表
        // 请求数据的地址
        url,
        // ------------------------
        // 通用数据
        // 表格数据
        dataList: [],
        // 搜索栏是否显示
        toolQueryVisiable: false,
        // 查询条件
        query: {
          // 一共多少页
          totalPage: 10,
          // 页码
          page: 1,
          // 一页显示几条
          size: 5,
          // 一共条数
          totalRow: undefined
        },
        // 表格加载动画
        tableLoading: false,
        // 选中的行
        checkedRow: [],
        // 搜索栏查询条件
        toolQuery: {},
        // 默认请求路径
        initUrl: `${url}page`,
        // 默认删除路径
        delUrl: `${url}del`,
        // 默认编辑路径
        editUrl: `${url}upd`,
        // 默认新增路径
        addUrl: `${url}add`,
        // 需要 0/1 转换为 布尔值的字段
        transfromArr: [],
        // 详情框标题
        dialogTitle: "",
        // 详情框 是否显示
        dialogVisible: false,
        // 详情框 状态
        dialogStatus: "add",
        // 决定toolBar -- 是否出现添加按钮
        toolBarAddBTN: true,
        // 列表配置
        tableColumnConfig: [],
        // 不自动渲染的列配置
        exclude: []
      };
    };
    this.methods = {
      // 刷新-API
      initData() {
        console.log("默认查询分页");
        this.tableLoading = true;
        let { size, page } = JSON.parse(JSON.stringify(this.query)),
          data = { size, page },
          toolQuery = JSON.parse(JSON.stringify(this.toolQuery));
        this.transfromArr.forEach(item => {
          toolQuery[item] = Number(toolQuery[item]);
        });
        // page - 页码
        // size - 页目数
        Object.assign(data, toolQuery);
        console.log("查询条件是", data);
        sendJSON(this.initUrl, data).then(res => {
          console.log(
            "%cMyProject%cline:264%cvar",
            "color:#fff;background:#ee6f57;padding:3px;border-radius:2px",
            "color:#fff;background:#1f3c88;padding:3px;border-radius:2px",
            "color:#fff;background:rgb(251, 178, 23);padding:3px;border-radius:2px",
            res
          );
          this.dataList = res.data.list;
          this.query.totalRow = res.data.totalRow;
          this.tableLoading = false;
        });
      },
      // Tool搜索栏
      searchOn(query) {
        this.toolQuery = query;
        this.initData();
      },
      // 删除数据 - API
      del(uuid) {
        console.log(uuid instanceof Array, uuid, "默认方式：删除");
        let param = [];
        uuid instanceof Array
          ? (param = uuid.map(item => item.uid))
          : param.push(uuid.uid);
        this.$confirm("是否确定要删除?", "确认信息", {
          distinguishCancelAndClose: true,
          confirmButtonText: "确定",
          cancelButtonText: "放弃删除"
        })
          .then(() => {
            sendJSON(this.delUrl, { uid: param }).then(res => {
              this.$message(res.msg);
              this.initData();
            });
          })
          .catch(() => {
            this.$message("操作已取消~");
          });
      },
      // 打开编辑弹窗
      openEdit(obj) {
        this.$refs["detail"].dialogVisible = true;
        const from = JSON.parse(JSON.stringify(obj));
        this.dialogTitle = `当前编写的：${from.actionKey}`;
        this.$refs["detail"].formData = from;
      },
      // 打开添加弹窗
      openAdd() {
        this.$refs["detail"].dialogVisible = true;
      },
      // 添加数据
      add(obj) {
        sendJSON(this.addUrl, obj).then(res => {
          console.log(res, "请求返回");
          this.$message(res.msg);
          this.$refs["detail"].dialogVisible = false;
          this.initData();
        });
      },
      // 编辑数据 - API
      edit(obj) {
        sendJSON(this.editUrl, obj).then(res => {
          // this.$message.success("编辑成功");
          console.log(res, "请求返回");
          this.$message(res.msg);
          this.$refs["detail"].dialogVisible = false;
          this.initData();
        });
        console.log("编辑的对象", obj, "默认方式 --");
      },
      //  获取选中表格行
      selectionChangeHandle(selection) {
        this.checkedRow = selection;
      },
      // 不渲染的列
      excludeHandle(key) {
        return this.exclude.some(item => item == key);
      },
      // 改变一页几条
      handleSizeChange(val) {
        console.log(`每页 ${val} 条`);
        this.query.size = val;
        this.initData();
      },
      // 改变当前页数
      handleCurrentChange(val) {
        console.log(`当前页: ${val}`);
        this.query.page = val;
        this.initData();
      }
    };
    this.computed = {
      // 过滤不显示的配置列
      cptColumn() {
        return this.tableColumnConfig.filter(item => item.show == true);
      },
      // 转为 启用/禁用
      processData() {
        return this.dataList.map(item => {
          this.transfromArr.forEach(option => {
            item[option] ? (item[option] = "启用") : (item[option] = "禁用");
          });
          return item;
        });
      },
      // 是否出现 查询按钮
      searchBtn() {
        console.log(this.toolQuery, "toolQuery");
        for (let i in this.toolQuery) {
          console.log(i);
          return true;
        }
        return false;
      }
    };
    this.mounted = function() {
      this.initData();
    };
  }
}
